package ${viewModule.viewPacking}.controller;


import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import org.hj.common.annotation.AutoLog;
import org.hj.common.api.vo.Result;
import org.hj.common.system.query.QueryGenerator;
import org.hj.common.system.util.Excel.ExportParams;
import org.hj.common.system.util.Excel.HjEntityExcelView;
import org.hj.common.system.util.Excel.NormalExcelConstants;
import org.hj.common.util.oConvertUtils;
import ${viewModule.viewPacking}.entity.${entityName};
import ${viewModule.viewPacking}.vo.${entityName}MainPage;
import ${viewModule.viewPacking}.service.I${entityName}Service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;

import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
<#list detailedTable as sub>
import ${viewModule.viewPacking}.service.I${sub}Service;
import ${viewModule.viewPacking}.entity.${sub};
</#list>


@Slf4j
@Api(tags="${viewModule.viewName}")
@RestController
@RequestMapping("/${entityName?uncap_first}")
public class ${entityName}Controller {
    @Autowired
    private I${entityName}Service ${entityName?uncap_first}Service;

<#list detailedTable as sub>
    @Autowired
    private I${sub}Service ${sub?uncap_first}Service;
</#list>

    /**
    * 分页列表查询
    * @param ${entityName?uncap_first}
    * @param pageNo
    * @param pageSize
    * @param req
    * @return
    */
    @AutoLog(value = "${viewModule.viewName}-分页列表查询")
    @ApiOperation(value="${viewModule.viewName}-分页列表查询", notes="${viewModule.viewName}-分页列表查询")
    @GetMapping(value = "/list")
    public Result<IPage<${entityName}>> queryPageList(${entityName} ${entityName?uncap_first},
                                                      @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
                                                      @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
                                                      HttpServletRequest req) {
        Result<IPage<${entityName}>> result = new Result<IPage<${entityName}>>();
        QueryWrapper<${entityName}> queryWrapper = QueryGenerator.initQueryWrapper(${entityName?uncap_first}, req.getParameterMap());
        Page<${entityName}> page = new Page<${entityName}>(pageNo, pageSize);
        IPage<${entityName}> pageList = ${entityName?uncap_first}Service.page(page, queryWrapper);
        result.setSuccess(true);
        result.setResult(pageList);
        return result;
    }



    /**
    *   添加
    * @param ${entityName?uncap_first}MainPage
    * @return
    */
    @PostMapping(value = "/add")
    public Result<${entityName}> add(@RequestBody ${entityName}MainPage ${entityName?uncap_first}MainPage) {
        Result<${entityName}> result = new Result<${entityName}>();
        try {
            ${entityName} ${entityName?uncap_first} = new ${entityName}();
            BeanUtils.copyProperties(${entityName?uncap_first}MainPage, ${entityName?uncap_first});

            ${entityName?uncap_first}Service.saveMain(${entityName?uncap_first}, <#list detailedTable as sub>${entityName?uncap_first}MainPage.get${sub}List()<#if sub_has_next>,</#if></#list>);
            result.success("添加成功！");
        } catch (Exception e) {
            log.error(e.getMessage(),e);
            result.error500("操作失败");
        }
        return result;
    }

    /**
    *  编辑
    * @param ${entityName?uncap_first}MainPage
    * @return
    */
    @PutMapping(value = "/edit")
    public Result<${entityName}> edit(@RequestBody ${entityName}MainPage ${entityName?uncap_first}MainPage) {
        Result<${entityName}> result = new Result<${entityName}>();
        ${entityName} ${entityName?uncap_first} = new ${entityName}();
        BeanUtils.copyProperties(${entityName?uncap_first}MainPage, ${entityName?uncap_first});
        ${entityName} ${entityName?uncap_first}Entity = ${entityName?uncap_first}Service.getById(${entityName?uncap_first}.getId());
        if(${entityName?uncap_first}Entity==null) {
            result.error500("未找到对应实体");
        }else {
            boolean ok = ${entityName?uncap_first}Service.updateById(${entityName?uncap_first});
            ${entityName?uncap_first}Service.updateMain(${entityName?uncap_first}, <#list detailedTable as sub>${entityName?uncap_first}MainPage.get${sub}List()<#if sub_has_next>,</#if></#list>);
            result.success("修改成功!");
        }

        return result;
    }



    /**
    *   通过id删除
    * @param id
    * @return
    */
    @DeleteMapping(value = "/delete")
    public Result<${entityName}> delete(@RequestParam(name="id",required=true) String id) {
        Result<${entityName}> result = new Result<${entityName}>();
        ${entityName} ${entityName?uncap_first} = ${entityName?uncap_first}Service.getById(id);
        if(${entityName?uncap_first}==null) {
            result.error500("未找到对应实体");
        }else {
            ${entityName?uncap_first}Service.delMain(id);
            result.success("删除成功!");
        }

        return result;
    }

    /**
    *  批量删除
    * @param ids
    * @return
    */
    @DeleteMapping(value = "/deleteBatch")
    public Result<${entityName}> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
        Result<${entityName}> result = new Result<${entityName}>();
        if(ids==null || "".equals(ids.trim())) {
            result.error500("参数不识别！");
        }else {
            this.${entityName?uncap_first}Service.delBatchMain(Arrays.asList(ids.split(",")));
            result.success("删除成功!");
        }
        return result;
    }

    /**
    * 通过id查询
    * @param id
    * @return
    */
    @GetMapping(value = "/queryById")
    public Result<${entityName}> queryById(@RequestParam(name="id",required=true) String id) {
        Result<${entityName}> result = new Result<${entityName}>();
        ${entityName} ${entityName?uncap_first} = ${entityName?uncap_first}Service.getById(id);
        if(${entityName?uncap_first}==null) {
            result.error500("未找到对应实体");
        }else {
            result.setResult(${entityName?uncap_first});
            result.setSuccess(true);
        }
        return result;
    }

    <#list detailedTable as sub>
        /**
        * 通过id查询${sub}
        * @param id
        * @return
        */
        @GetMapping(value = "/query${sub}ByMainId")
        public Result<List<${sub}>> query${sub}ListByMainId(@RequestParam(name="id",required=true) String id) {
            Result<List<${sub}>> result = new Result<List<${sub}>>();
            List<${sub}> ${sub?uncap_first}List = ${sub?uncap_first}Service.selectByMainId(id);
            result.setResult(${sub?uncap_first}List);
            result.setSuccess(true);
            return result;
        }
    </#list>





}
